package com.ericsson.enap.modules.ebmLog.task;

import com.ericsson.enap.modules.ebmLog.constant.EbmConstant;
import com.ericsson.enap.modules.ebmLog.entity.EbmEventVO;
import com.ericsson.enap.modules.sys.entity.EpcDict;
import com.ericsson.enap.modules.sys.entity.EnipNetelement;
import com.ericsson.common.quartz.task.ManualTask;
import com.ericsson.common.util.LogFileName;
import com.ericsson.common.util.LoggerUtils;
import com.ericsson.enap.modules.ebmLog.service.EbmLogService;
import com.ericsson.enap.modules.sys.service.EpcDictService;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @description: ebmLog主任务
 * @author: wangjingshi
 * @create: 2021-04-19 09:32
 */
@Component
public class EbmLogTask implements ManualTask {

    private Logger log = LoggerUtils.Logger(LogFileName.EbmLogJob);


    @Autowired
    private EbmLogService ebmLogService;
    @Autowired
    private EpcDictService epcDictService;
    @Value("${collectorIp}")
    private String collectorIp;

    @Override
    public void execute() {
        long startTime = new Date().getTime();
        log.info("===== do EbmLogTask start =====: "+startTime);
        /**
         * 一、获取事件配置表，即需要统计什么事件，
         *     key:event_type(L_ATTACH)+"-"+sub_event_type(NOT_V) value:eventname(att)
         */
        Map<String, EbmEventVO> eventMap = ebmLogService.eventMap(1);
        /** 二、下载原始ebm文件,返回当前采集器采集的网元信息列表 */
        String ebmPath = epcDictService.selectEpcDict(new EpcDict(EbmConstant.EbmLogPath)).getKeyValue();
        List<EnipNetelement> list = ebmLogService.DownLoadEbmFiles(3,collectorIp,ebmPath);
        /** 三、执行世凯脚本，解析ebm原始文件 */
        ebmLogService.AnalysisEbmFiles(list,eventMap,ebmPath);
        /** 四、清除过期文档(清除过期数据库表) */
        ebmLogService.dropExpireDocuments(eventMap);
        /** 五、统计文件，最后把结果录入数据库 */
        ebmLogService.statisticAndLoadEbmLogs(list,eventMap,ebmPath);
        long endTime = new Date().getTime();
        log.info("==== total time :"+(endTime-startTime)/1000/(double)60.00);

    }


}
